﻿/*************************************
 * Creator:SW-PeiYang
 * DateTime:2023/12/8 9:32:28
 * Description:<Description>
 * CopyRight:中广核研究院有限公司
 * ***********************************/

using Cpjit.SunnyPaine.Toolkit.Net.Sockets.Model;
using System;
using System.Collections.Generic;
using System.Net.Sockets;

namespace Cpjit.SunnyPaine.Toolkit.Net.Sockets.IDataHandlingApdapter
{
    /// <summary>
    /// 表示处理Socket消息的处理适配器。
    /// </summary>
    public interface IDataHandlingAdapter : IDisposable
    {
        /// <summary>
        /// 是否启用消息缓存超时。默认false。
        /// </summary>
        bool UseCacheTime { get; set; }
        /// <summary>
        /// 缓存大小。默认<see cref="ushort.MaxValue"/>。
        /// </summary>
        int Capacity { get; }


        /// <summary>
        /// 当接收的数据处理完成后发生。
        /// </summary>
        event Action<SocketSession, byte[]> GoReceived;
        /// <summary>
        /// 当发送的数据处理完成后发生。
        /// </summary>
        event Action<Socket, byte[], bool> GoSend;


        /// <summary>
        /// 消息接收前处理。
        /// </summary>
        /// <param name="session"></param>
        void PreviewReceived(SocketSession session);
        /// <summary>
        /// 消息发送前处理。
        /// </summary>
        /// <param name="remote"></param>
        /// <param name="datas"></param>
        /// <param name="isAsync"></param>
        void PreviewSend(Socket remote, byte[] datas, bool isAsync);
        /// <summary>
        /// 消息发送前处理。
        /// </summary>
        /// <param name="remotes">远端Socket实例。</param>
        /// <param name="datas">要发送的数据。</param>
        /// <param name="isAsync">是否异步发送。true：异步，false：同步。</param>
        void PreviewSend(List<Socket> remotes, byte[] datas, bool isAsync);
    }
}
